package com.dongdong.bookstore.module.cms.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dongdong.bookstore.module.cms.model.User;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dongdong.bookstore.module.cms.viewmodel.UpdateUserParam;
import com.dongdong.bookstore.module.cms.viewmodel.UpdateUserPasswordParam;
import com.dongdong.bookstore.module.cms.viewmodel.UserLoginParam;
import com.dongdong.bookstore.module.cms.viewmodel.UserRegistParam;
import org.springframework.security.core.userdetails.UserDetails;

/**
 * <p>
 * 会员表 服务类
 * </p>
 *
 * @author chiangkai
 * @since 2021-10-27
 */
public interface UserService extends IService<User> {

    /** 用户注册
     * @param param
     * @return
     */
    User userRegister(UserRegistParam param);

    //获取用户通过用户名
    UserDetails loadUserByName(String username, String email, String tel);

    UserDetails loadUserByName(String username);

    /**
     *   通过用户名判断用户是否存在
     */
    void judgeAdminExistByUsername(String username);

    /**
     * 通过手机号判断用户是否存在
     * @param tel
     */
    void judgeAdminExistByTel(String tel);

    /**
     *  通过邮箱判断用户是否存在
     * @param email
     */
    void judgeAdminExistByEmail(String email);

    /** 通过用户名获取用户
     *
     * @param username
     * @return
     */
    User getUserByUsername(String username);

    /**
     *  通过手机号获取用户
     *
     * @param tel
     * @return
     */
    User getUserByTel(String tel);

    /**
     *  通过邮箱获取用户
     * @param email
     * @return
     */
    User getUserByEmail(String email);

    //用户上传头像
    //　TODO　上传头像



    /**
     *  刷新token
     * @param token
     * @return
     */
    String refreshUserToken(String token);

    /**
     *  获取用户列表
     * @param keyword
     * @param pageSize
     * @param pageNum
     * @return
     */
    Page<User> userList(String keyword, Integer pageSize, Integer pageNum);

    /**
     *  更新用户(除密码外)信息
     * @param id
     * @param updateUserParam
     * @return
     */
    boolean userUpdateBaseInfo(Long id, UpdateUserParam updateUserParam);

    /**
     *  通过旧密码更新密码
     * @param updateUserPasswordParam
     */
    void updatePassword(UpdateUserPasswordParam updateUserPasswordParam);

    /**
     *  逻辑删除用户
     * @param id
     * @return
     */
    boolean userDel(Long id);

    /**
     *  恢复被删除的用户
     * @param id
     * @return
     */
    boolean userRenew(Long id);

    /**
     * 登录
     * @param userLoginParam
     * @return
     */
    String login(UserLoginParam userLoginParam);
}
